home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / trueSpace 7.6 / tS761B8Std.exe / {app} / Scripts / D3D / RsD3DWireRender.fx < prev    next >
Text File  |  2008-06-10  |  4KB  |  172 lines

  1. //----------------------------------------------------------------------
  2. //Wireframe-rendering
  3. //
  4. //Author - Michal Valient
  5. //Copyright (C) 2004-2008 Caligari corporation
  6. //
  7. //----------------------------------------------------------------------
  8.  
  9.  
  10. uniform float4x4 mToClip;
  11.  
  12. uniform float4 cColorMultiplier;
  13. uniform float4 cColorModifier;
  14. uniform float fOpacity;
  15.  
  16. uniform float fDepthBias = 1.0f / 65536.0f; //Set depth bias to the value that will work for 16bit z-buffers
  17.  
  18. #ifdef RsShaderHWSKINNING
  19.     #define SKIN_INDEX_SHIFT 0.001960784313725490196078431372549f
  20.     #define RTD3DMESH_MAXIMUM_BONE_COUNT 64
  21.     float4x3 RsD3DMaterialFromME_mSkinMatrices[RTD3DMESH_MAXIMUM_BONE_COUNT];
  22. #endif //RsShaderHWSKINNING
  23.  
  24.  
  25. struct VS_MATPOINT_IN {
  26.     float4 vPosition    : POSITION; //position in object space
  27.     float4 cPointColor  : COLOR;    //point color
  28. };
  29.  
  30. typedef struct {
  31.     float4 vPosition    : POSITION; //position in object space
  32.     float4 cPointColor  : COLOR;    //point color
  33. } VS_MATPOINT_OUT;
  34.  
  35. VS_MATPOINT_OUT VS_CMaterialPointRender(            in VS_MATPOINT_IN input
  36.  
  37. #ifdef RsShaderHWSKINNING
  38.                                                     , in float4 D3_vInputBlendIndices : BLENDINDICES
  39.                                                     , in float4 D3_cInputBlendWeight : BLENDWEIGHT
  40. #endif //RsShaderHWSKINNING
  41.  
  42. )
  43. {
  44.     float4 local_vertex_position;
  45.     
  46. #ifdef RsShaderHWSKINNING
  47.  
  48.     float3 tmp_position = 0;
  49.      
  50.     //Get the blend weights
  51.     float4 blend_weights = (255.0f/127.0f)*D3_cInputBlendWeight - (128.0f / 127.0f);
  52.     float4 blend_indices = D3_vInputBlendIndices * 255.0f + SKIN_INDEX_SHIFT;
  53.     
  54.     
  55.     /// Skin it!
  56.     for (int bone_idx = 0; bone_idx<4; bone_idx++)
  57.     {
  58.         int matrix_idx            = (int)blend_indices[bone_idx];
  59.         float weight            = blend_weights[bone_idx];
  60.         
  61.         float3 bone_position    = weight*mul(input.vPosition,        RsD3DMaterialFromME_mSkinMatrices[matrix_idx]);
  62.         
  63.         tmp_position            += bone_position;
  64.     }
  65.  
  66.     local_vertex_position.xyz = tmp_position.xyz;
  67.     local_vertex_position.w   = 1.0f;
  68.  
  69. #else
  70.  
  71.     local_vertex_position = input.vPosition;
  72.  
  73. #endif //RsShaderHWSKINNING
  74.  
  75.     VS_MATPOINT_OUT output;
  76.     output.vPosition = mul(local_vertex_position, mToClip); //vertex clip position
  77.     output.vPosition.z = ((output.vPosition.z/output.vPosition.w) - fDepthBias) * output.vPosition.w;
  78.     output.cPointColor = cColorMultiplier * input.cPointColor + cColorModifier;
  79.     output.cPointColor.a = fOpacity * input.cPointColor.a;
  80.     return output;
  81. }
  82.  
  83. float4 PS_CMaterialPointRender(float4 cPointColor : COLOR) : COLOR
  84. {
  85.     return cPointColor;
  86. }
  87.  
  88. vertexshader VS_PointRenderer = compile vs_2_0 VS_CMaterialPointRender();
  89.  
  90. pixelshader PS_PointRenderer = compile ps_1_1 PS_CMaterialPointRender();
  91.  
  92. ///Point rendering for PS capable hardware
  93. technique T_PointRender_PS
  94. {
  95.     pass P0
  96.     {
  97.         VertexShader = (VS_PointRenderer);
  98.         PixelShader = (PS_PointRenderer);
  99.  
  100.         AlphaBlendEnable = true;
  101.         SrcBlend = SRCALPHA;
  102.         DestBlend = INVSRCALPHA;
  103.         
  104.         ZEnable = true;
  105.         ZFunc = LESSEQUAL;
  106.         ZWriteEnable = false;
  107.  
  108.         SpecularEnable = false;
  109.         ColorVertex = true;
  110.  
  111.         CullMode = NONE;
  112.     }
  113. }
  114.  
  115. technique T_PointRender_Plain_Cascade
  116. {
  117.     pass P0
  118.     {
  119.         VertexShader = (VS_PointRenderer);
  120.         PixelShader = NULL;
  121.  
  122.         AlphaBlendEnable = true;
  123.         SrcBlend = SRCALPHA;
  124.         DestBlend = INVSRCALPHA;
  125.         
  126.         ZEnable = true;
  127.         ZFunc = LESSEQUAL;
  128.         ZWriteEnable = false;
  129.         
  130.         Lighting = false;
  131.         ShadeMode = GOURAUD;
  132.  
  133.         SpecularEnable = false;
  134.         ColorVertex = true;
  135.  
  136.         // Set the stages.
  137.         ColorOp[0]   = SELECTARG1;
  138.         ColorArg1[0] = DIFFUSE;
  139.         ColorOp[1]   = DISABLE;
  140.         AlphaOp[0]   = SELECTARG1;
  141.         AlphaArg1[0] = DIFFUSE;
  142.         AlphaOp[1]   = DISABLE;
  143.         
  144.         CullMode = NONE;
  145.     }
  146. }
  147.  
  148. technique T_PointRender_Plain
  149. {
  150.     pass P0
  151.     {
  152.         VertexShader = (VS_PointRenderer);
  153.         PixelShader = NULL;
  154.  
  155.         AlphaBlendEnable = true;
  156.         SrcBlend = SRCALPHA;
  157.         DestBlend = INVSRCALPHA;
  158.         
  159.         ZEnable = true;
  160.         ZFunc = LESSEQUAL;
  161.         ZWriteEnable = false;
  162.         
  163.         Lighting = false;
  164.         ShadeMode = GOURAUD;
  165.  
  166.         SpecularEnable = false;
  167.         ColorVertex = true;
  168.  
  169.         CullMode = NONE;
  170.     }
  171. }
  172.